package cl.tinet.trainee.tarea6b.business;

import java.io.Serializable;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import cl.tinet.trainee.tarea6b.ejb.InterfazUsuarioBean;
import cl.tinet.trainee.tarea6b.model.Usuario;
import cl.tinet.trainee.tarea6b.model.UsuarioNoEncontradoException;

/**
 * Managed Bean que maneja la informacion que proviene desde la capa web y la
 * redirecciona a los metodos necesarios.
 * 
 * @author Frmancil
 * 
 */
@ManagedBean
@ViewScoped
public class UsuarioManagedBean implements Serializable {

	private static final long serialVersionUID = 1L;
	@EJB(mappedName = "userBean", name = "userBean")
	private transient InterfazUsuarioBean bean;

	protected Usuario usuario;
	private List<Usuario> usuarios;

	/**
	 * Instanciador de nuevo Entity Manager para cada acceso a la clase.
	 */
	@PostConstruct
	public void init() {
		if (this.usuario == null) {
			this.usuario = new Usuario();
		}
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	/**
	 * Recibe un usuario creado desde la capa web y lo agrega a la base de
	 * datos.
	 * 
	 * @return El valor de retorno indica la pagina a la que redirecciona el
	 *         metodo, en este caso la pagina index.
	 */
	public String agregarMG() {
		bean.agregarUsuario(usuario);
		return "index";
	}

	/**
	 * Recibe del bean un usuario y lo elimina de la base de datos.
	 * 
	 * @return El valor de retorno indica la pagina a la que redirecciona el
	 *         metodo, en este caso la pagina borrar.
	 */
	public String borrarMG() {
		try {
			bean.borrarUsuario(usuario);
		} catch (UsuarioNoEncontradoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "borrar";
	}

	/**
	 * Recibe del bean un usuario y lo actualiza de la base de datos.
	 * 
	 * @return El valor de retorno indica la pagina a la que redirecciona el
	 *         metodo, en este caso la pagina actualizar.
	 */
	public String actualizarMG() {
		try {
			bean.actualizarUsuario(usuario);
		} catch (UsuarioNoEncontradoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return "actualizar";
	}

	/**
	 * Metodo que retorna la lista de todos los usuarios.
	 * 
	 * @return Retorna una lista con todos los usuarios que se encuentran en la
	 *         base de datos.
	 */
	public List<Usuario> listarMG() {
		usuarios = bean.listarUsuarios();
		return usuarios;
	}

}